#ifndef __CONFIGURATION_H__
#define __CONFIGURATION_H__

#include <unordered_map>
#include <string>
#include <unordered_set>
#include <sstream>

using std::unordered_map;
using std::pair;
using std::string;
using std::unordered_set;
using std::istringstream;
using std::ostringstream;

class Configuration {
public:
    static Configuration* getInstance();

    unordered_map<string, string>& getConfigMap(); // 获取配置文件内容
    string getConfigValue(const string&); // 获取配置文件key对应的value内容
    unordered_set<string>& getEnStopWordList(); // 获取英文停用词
    unordered_set<string>& getZhStopWordList(); // 获取中文停用词

private:
    Configuration();
    ~Configuration();
    static void init();
    static void destroy();
    void configMapInit(const string& filename);
    void stopWordListInit();

private:
    static string _filepath; // 配置文件路径
    unordered_map<string, string> _configMap; // 配置文件内容
    unordered_set<string> _enStopWordList; // 英文停用词集
    unordered_set<string> _zhStopWordList; // 中文停用词集
    static Configuration* _pInstance;
    static pthread_once_t _once;
};

#endif

